package com.nd.android.musicboxlibrary.interf;

import android.content.Context;
import com.nd.android.musicboxlibrary.business.bean.MusicInfo;

import java.util.ArrayList;
import java.util.List;

/**
 * 播放控制接口 Created 2014年7月11日 上午2:00:44
 * 
 * @version
 * @author zxq
 * 
 * @see
 */
public interface IPlayerManager {
    int PLAYER_STATE_STOPPED = 0;
    int PLAYER_STATE_PLAYING = 1;
    int PLAYER_STATE_PAUSED = 2;
    int PLAYER_STATE_PREPARING = 3;

    /**
     * 初始化歌曲列表 Created 2014年9月15日 下午11:17:03
     * 
     * @param context
     *            上下文
     * @author zxq
     */
    void initMusicList(Context context);

    /**
     * 初始化播放列表 Created 2014年9月15日 下午11:17:09
     * 
     * @param context
     *            上下文
     * @param list
     *            歌曲列表
     * @author zxq
     */
    void initMusicList(Context context, ArrayList<? extends MusicInfo> list);

    /**
     * 停止 Created 2014年9月15日 下午11:17:12
     * 
     * @param context
     *            上下文
     * @author zxq
     */
    void stop(Context context);

    /**
     * 播放 Created 2014年9月15日 下午11:17:19
     * 
     * @param context
     *            上下文
     * @param position
     *            歌曲进度
     * @author zxq
     */
    void play(Context context, int position);

    /**
     * 暂停 Created 2014年9月15日 下午11:17:22
     * 
     * @param context
     *            上下文
     * @author zxq
     */
    void pause(Context context);

    /**
     * 上一首 Created 2014年9月15日 下午11:17:25
     * 
     * @param context
     *            上下文
     * @author zxq
     */
    void prev(Context context);

    /**
     * 下一首 Created 2014年9月15日 下午11:17:27
     * 
     * @param context
     *            上下文
     * @author zxq
     */
    void next(Context context);

    /**
     * 快进 Created 2014年9月15日 下午11:17:30
     * 
     * @param context
     *            上下文
     * @param position
     *            进度
     * @author zxq
     */
    void seekTo(Context context, int position);

    /**
     * 更新循环类型 Created 2014年9月15日 下午11:17:33
     * 
     * @param context
     *            上下文
     * @param loopType
     *            循环类型 0-顺序播放,1-单曲循环,2-随机播放
     * @author zxq
     */
    void updateLoopType(Context context, int loopType);

    /**
     * 播放歌曲 Created 2014年9月15日 下午11:17:36
     * 
     * @param context
     *            上下文
     * @author zxq
     */
    void play(Context context);

    /**
     * 播放指定歌曲 Created 2014年9月15日 下午11:17:39
     * 
     * @param context
     *            上下文
     * @param musicInfo
     *            歌曲
     * @author zxq
     */
    void play(Context context, MusicInfo musicInfo);

    /**
     * 播放歌曲 Created 2014年9月15日 下午11:17:42
     * 
     * @param context
     *            上下文
     * @param musicInfo
     *            歌曲
     * @param list
     *            歌曲列表
     * @param index
     *            序号
     * @author zxq
     */
    void playByItem(Context context, MusicInfo musicInfo, List<MusicInfo> list, int index);

    /**
     * 播放歌曲 Created 2014年9月15日 下午11:17:42
     *
     * @param context
     *            上下文
     * @param musicInfo
     *            歌曲
     * @param list
     *            歌曲列表
     * @param index
     *            序号
     * @param needClosePage boolean
     * @author zxq
     */
    void playByItem(Context context, MusicInfo musicInfo, List<MusicInfo> list, int index, boolean needClosePage);

    /**
     * 播放专辑 Created 2014年9月15日 下午11:17:45
     * 
     * @param context
     *            上下文
     * @param musicInfo
     *            歌曲
     * @param list
     *            歌曲列表
     * @author zxq
     */
    void playBySpecialItem(Context context, MusicInfo musicInfo, ArrayList<MusicInfo> list);

    /**
     * 随机播放 Created 2014年9月15日 下午11:17:00
     * 
     * @param context
     *            上下文
     * @param list
     *            歌曲列表
     * @author zxq
     */
    void playByRandom(Context context, List<MusicInfo> list);

    /**
     * 播放新的列表
     * 
     * @param context
     *            上下文
     * @param list
     *            歌曲列表
     * @param music
     *            音乐
     * @author zxq
     */
    void playByOtherList(Context context, ArrayList<? extends MusicInfo> list, MusicInfo music);

    /**
     * 播放新的列表
     * 
     * @param context
     *            上下文
     * @param list
     *            歌曲列表
     * @param index
     *            序号
     * @author zxq
     */
    void playByOtherList(Context context, ArrayList<? extends MusicInfo> list, int index);

    /**
     * 设置当前播放的音乐
     * @param musicInfo MusicInfo
     * @author zxq
     */
    void setCurrentMusic(MusicInfo musicInfo);

    /**
     * 获取当前播放的音乐
     * 
     * @return MusicInfo
     * @author zxq
     */
    MusicInfo getCurrentMusicInfo();

    /**
     * 设置播放器状态
     * 
     * @param state
     *            状态
     * @author zxq
     */
    void setPlayerState(int state);

    /**
     * 获取播放器状态
     * 
     * @return Stopped-0, Playing-1, Paused-2, Preparing-3
     */
    int getPlayerState();
}
